/**
 * 认证相关路由配置文件
 * 作用：集中定义用户注册、登录、获取当前用户信息等认证相关的API接口
 * 路由最终会被挂载到主应用中，统一处理认证相关请求
 */

// 导入依赖模块
// 导入express框架，用于创建路由
const express = require("express");
// 导入认证相关的控制器函数，这些函数封装了具体的业务逻辑
// register：处理用户注册逻辑
// login：处理用户登录逻辑
// getCurrentUser：处理获取当前登录用户信息的逻辑
const { register, login, getCurrentUser } = require("../controllers/auth");
// 导入认证中间件protect，用于保护需要登录才能访问的接口
// 作用：验证请求是否携带有效的认证信息（如token），未认证则拒绝访问
const { protect } = require("../middleware/auth");

// 创建路由实例
// Router是Express提供的路由中间件，用于模块化管理路由
const router = express.Router();

/**
 * 用户注册接口
 * 请求方法：POST
 * 请求路径：/api/auth/register（完整路径，取决于在app.js中的挂载路径）
 * 功能：接收用户注册信息（如用户名、密码等），创建新用户
 * 无需认证：任何人都可以访问注册接口
 * 控制器：register（具体处理注册逻辑，如数据验证、密码加密、写入数据库等）
 */
router.post("/register", register);

/**
 * 用户登录接口
 * 请求方法：POST
 * 请求路径：/api/auth/login（完整路径）
 * 功能：接收用户登录信息（如用户名、密码），验证成功后返回认证凭证（如token）
 * 无需认证：任何人都可以访问登录接口
 * 控制器：login（具体处理登录逻辑，如验证用户存在性、密码匹配、生成token等）
 */
router.post("/login", login);

/**
 * 获取当前登录用户信息接口
 * 请求方法：GET
 * 请求路径：/api/auth/me（完整路径）
 * 功能：返回当前登录用户的详细信息（如id、用户名等）
 * 需要认证：通过protect中间件验证用户已登录
 * 中间件：protect（在进入控制器前验证token有效性，无效则返回401错误）
 * 控制器：getCurrentUser（获取并返回当前用户信息）
 */
router.get("/me", protect, getCurrentUser);

// 导出路由实例
// 供主应用（如app.js）通过app.use()方法挂载，示例：
// app.use('/api/auth', authRouter) 此时完整接口路径会加上'/api/auth'前缀
module.exports = router;
